<!-- 饼图 -->

<template>
  <EasyChart :baseOption="OPTION" :option="option" :onClick="toClick" />
</template>

<script>
// ============================== 导入依赖 ============================== //

import OPTION from './OPTION'
import props from './props'

// ============================== 导出组件 ============================== //

export default {
  /**
   * 名称定义 (实际使用名称)
   */
  name: 'OurChartPie',

  /**
   * 属性注册 (抽取以便查阅)
   */
  props,

  /**
   * 计算属性 (慎用箭头函数)
   */
  computed: {
    /**
     * 基础配置
     */
    OPTION: () => OPTION,

    /**
     * 图表配置
     */
    option() {
      const { xData, dataList, title, transName } = this

      const total = dataList.reduce((num, item) => num + item, 0)

      return {
        title: {
          text: total,
          subtext: title,
        },
        legend: {
          formatter: (name) => {
            const index = xData.indexOf(name)
            const value = dataList[index] || 0
            return `${transName(name)}　${value}`
          },
        },
        series: [
          {
            data: xData.map((name, i) => ({ name, value: dataList[i] })),
          },
        ],
      }
    },
  },

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    /**
     * 点击事件
     */
    toClick(params) {
      this.$emit('click', params)
    },

    /**
     * 转换名称
     */
    transName(name) {
      const BLANK = '　'.repeat(6)
      const text = name.replace(/[\u4e00-\u9fa5]/g, '**')
      const length = text.length + 1
      return `${name}${length % 2 ? '' : '  '}${BLANK.slice(length / 2 | 0)}`
    },
  },
}
</script>
